package com.ttbj.order.dao;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ttbj.api.dto.Page;
import com.ttbj.api.dto.order.OrderCustomDriverDto;
import com.ttbj.api.dto.order.OrderCustomDto;

public interface OrderMapper {
	
	/**
	 * 分页条件查询预订单信息，只查状态是预约状态的搬运单分配给业务员
	 * @param order 封装了条件查询的信息
	 * @param page 分页信息
	 * @return
	 */
	public List<OrderCustomDto> queryAdvanceSalOrderInfoByPage(@Param("o") OrderCustomDto order, @Param("page") Page page);
	
	/**
	 * 分页条件查询预订单信息数量，只查状态是预约状态的搬运单分配给业务员
	 * @param order 封装了条件查询的信息
	 * @return
	 */
	public Integer queryAdvanceSalOrderInfoByPageCount(@Param("o") OrderCustomDto order);
	
	/**
	 * 分页查询预订单信息，只查状态转为手动的搬运单分配司机
	 * @param orderAutoComple 0:转为手动  1：手动
	 * @param orderState 全部状态
	 * @param page 分页信息
	 * @return
	 */
	public List<OrderCustomDriverDto> queryAdvanceDriOrderInfoByPage(@Param("orderAutoComple") Integer orderAutoComple, @Param("page") Page page);
	
	/**
	 * 分页查询预订单信息数量，只查状态转为手动的搬运单分配给司机
	 * @param orderAutoComple 0:转为手动  1：手动
	 * @param orderState 全部状态
	 * @return
	 */
	public Integer queryAdvanceDriOrderInfoByPageCount(@Param("orderAutoComple") Integer orderAutoComple);
	
	/**
	 * 查询未支付的订单信息，order_pay_state为1和-1的时候（1或-1在SQL中写了）
	 * @param order 查询条件查询的信息
	 * @param page
	 * @return
	 */
	public List<OrderCustomDto> queryAdvanceOrderInfoByPage(@Param("o") OrderCustomDto order, @Param("page") Page page);
	
	/**
	 * 查询未支付的订单信息数量，order_pay_state为1和-1的时候（1或-1在SQL中写了）
	 * @param order 封装了条件查询的信息
	 * @return
	 */
	public Integer queryAdvanceOrderInfoByPageCount(@Param("o") OrderCustomDto order);
	
	/**
	 * 分页条件查询支付及账单信息，只查状态是支付成功的搬运单
	 * @param order 封装了条件查询的信息
	 * @param page 分页信息
	 * @return
	 */
	public List<OrderCustomDto> queryCompleteOrderInfoByPage(@Param("o") OrderCustomDto order, @Param("page") Page page);
	
	/**
	 * 分页条件查询支付及账单信息数量，只查状态是支付成功的搬运单
	 * @param order 封装了条件查询的信息
	 * @return
	 */
	public Integer queryCompleteOrderInfoByPageCount(@Param("o") OrderCustomDto order);
	
	/**
	 * 通过订单id更新订单的状态
	 * @param orderState 订单状态
	 * @param orderId 订单id
	 * @return
	 */
	public int updateOrderStateById(@Param("orderState") Integer orderState, @Param("orderUpdateDate") Date orderUpdateDate, @Param("orderId") Long orderId);
	
	/**
	 * 通过订单id更新订单已经派了几辆车的数量
	 * @param orderDriverAlready 已派了几辆车
	 * @param orderUpdateDate 更新时间
	 * @param orderId 订单id
	 * @return
	 */
	public int updateOrderDriverAlreadyById(@Param("orderDriverAlready") Integer orderDriverAlready, @Param("orderUpdateDate") Date orderUpdateDate, @Param("orderId") Long orderId);
	
	/**
	 * 查询最新的一个搬运单订单信息，条件是预约状态和是否搬运单
	 * @param orderState 全部状态：0为预约状态
	 * @param orderIsMove：是否为搬运单，0为搬运单
	 * @return
	 */
	public Long queryNewestOrderInfo(@Param("orderState") Integer orderState, @Param("orderIsMove") Integer orderIsMove);
	
	/**
	 * 退款单中审核通过（退款成功）或者审核未通过后更新订单的isDel
	 * @param orderIsDel 是否删除：0删除，1未删除
	 * @param orderId 订单id
	 */
	public void updateOrderIsDel(@Param("orderIsDel") Integer orderIsDel, @Param("orderId") Long orderId);
}
